function getAllProperties(obj) {
    const properties = new Set();
  
    // 遍历对象的原型链
    let currentObj = obj;
    while (currentObj !== null) {
      // 获取当前对象的所有自有属性名（包括不可枚举的）
      const props = Object.getOwnPropertyNames(currentObj);
      // 将属性名添加到 Set 中（避免重复）
      props.forEach(prop => properties.add(prop));
      // 移动到原型对象
      currentObj = Object.getPrototypeOf(currentObj);
    }
  
    // 将 Set 转换为数组并返回
    return Array.from(properties);
  }
  
  // 示例对象
  const exampleObj = {
    name: 'Alice',
    age: 30
  };
  
  
  // 调用 getAllProperties 方法获取对象的所有属性
  const allProps = getAllProperties(exampleObj);
  console.log(allProps); // 输出：[ 'name', 'age', 'greeting' ]